package fr.generali.accueilclient.gwt.client.ui.components.entete;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.resources.client.CssResource;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Widget;

import fr.generali.accueilclient.gwt.client.ui.resources.GlobalResources;

/**
 * 
 * Une entete se présente sous la forme d'un Label en dessous duquel on
 * retrouve une barre horizontale.<br>
 * Cette barre horizontale prend toute la largeur de son conteneur parent.<br>
 * Une entete ne présente aucune intelligence, est se veut être un composant
 * pour structurer les données<br>
 * mais sans que celles-ci y soient liées directement.
 * 
 */
public class Entete extends Composite {

    private static EnteteUiBinder uiBinder = GWT.create(EnteteUiBinder.class);

    interface EnteteUiBinder extends UiBinder<Widget, Entete> {
    }

    public interface Resources extends GlobalResources {

        @Source({ "components/entete/entete.css" })
        Style style();

        interface Style extends CssResource {
            String entete();
            String border();
            String inline();
            String desc();
        }
    }

    /** Le Bundle contenant les Css associés au widget. */
    @UiField
    protected Resources res;

    /** Le libellé de la entete */
    @UiField
    Label nameLabel;

    @UiField
    Label actionLink;
    
    @UiField
    Label descLabel;

    public Entete() {
        initWidget(uiBinder.createAndBindUi(this));
        res.style().ensureInjected();
    }

    public Entete(String intituleEntete) {
        initWidget(uiBinder.createAndBindUi(this));
        nameLabel.setText(intituleEntete);
    }

    public void setText(String text) {
        nameLabel.setText(text);
    }
    
    public void setDescription(String text) {
        descLabel.setText(text);
    }

    public void setBorder(boolean hasBorder) {
        if (hasBorder) {
            if (!nameLabel.getStyleName().contains(res.style().border())) {
                nameLabel.addStyleName(res.style().border());
            }
        } else {
            if (nameLabel.getStyleName().contains(res.style().border())) {
                nameLabel.removeStyleName(res.style().border());
            }
        }
    }

    public void setActionLinkLabel(String actionLinkLabel) {
        actionLink.setText(actionLinkLabel);
        actionLink.setVisible(true);
    }

    public void addActionLinkClickHandler(ClickHandler clickHandler) {
        actionLink.addClickHandler(clickHandler);
    }
}
